package m.jclecai.com.view.common;

import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.TextView;

import m.jclecai.com.R;

/**
 * Created by andy on 2017/7/6.
 *
 * 这里是一个BallView,自带有checked的效果
 */
public class BallView extends FrameLayout implements View.OnClickListener{
    private TextView mTvBall;

    boolean isChecked=false;

    public  boolean isHasAnimation=true;


    public BallView(Context context) {
        this(context,null);
    }

    public BallView(Context context, AttributeSet attrs) {
        this(context, attrs,0);
    }

    public BallView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        View.inflate(context, R.layout.layout_ball,this);
        init();
    }

    private void init() {
        mTvBall = ((TextView) findViewById(R.id.txt_ball_num));
        mTvBall.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        isChecked=!isChecked;
        changeStatus();
    }

    private void changeStatus() {
        if(isChecked){
            mTvBall.setBackgroundResource(R.drawable.red_ball);
            mTvBall.setTextColor(Color.WHITE);
            //这个时候，我们还可以开启一个动画；
            if(hasAnimation()){
                startBallAnimation(mTvBall);
            }
        }else{
            mTvBall.setBackgroundResource(R.drawable.shape_ball_red_bg);
            mTvBall.setTextColor(getResources().getColor(R.color.baseRed));
        }
        if (mOnCheckedChangeListener != null) {
            mOnCheckedChangeListener.onCheckedChange(this,isChecked);
        }
    }


    private void changeStatus(boolean abortListener) {
        if (isChecked) {
            mTvBall.setBackgroundResource(R.drawable.red_ball);
            mTvBall.setTextColor(Color.WHITE);
            //这个时候，我们还可以开启一个动画；
            if (hasAnimation()) {
                startBallAnimation(mTvBall);
            }
        } else {
            mTvBall.setBackgroundResource(R.drawable.shape_ball_red_bg);
            mTvBall.setTextColor(getResources().getColor(R.color.baseRed));
        }
        if (mOnCheckedChangeListener != null && abortListener) {
            mOnCheckedChangeListener.onCheckedChange(this, isChecked);
        }
    }


    public void setNumber(String number){
        mTvBall.setText(number);
    }

    public String getNumber(){
        return mTvBall.getText().toString();
    }


    public boolean isChecked() {
        return isChecked;
    }

    /**
     * 只有false-->true  true--->false 的时候，setChecked方法才会生效；
     * @param checked
     */
    public void setChecked(boolean checked) {
        if (isChecked!=checked) {
            isChecked = checked;
            changeStatus();
        }
    }

    /**
     * @param checked
     * @param abortListener 是否触发监听
     */
    public void setChecked(boolean checked, boolean abortListener) {
        if (isChecked != checked) {
            isChecked = checked;
            changeStatus(abortListener);
        }
    }


    /**
     * 这里是从未选中到选中的一个缩放动画；
     */
    public void startBallAnimation(View view){
        //一个缩放动画；
        AnimatorSet animatorSet = new AnimatorSet();

        ObjectAnimator animator1 = ObjectAnimator.ofFloat(view, "scaleY", 1f, 0.8f, 1f);
        ObjectAnimator animator2 = ObjectAnimator.ofFloat(view, "scaleX", 1f, 0.8f, 1f);

        animatorSet.playTogether(animator1, animator2);
        animatorSet.setDuration(200);
        animatorSet.start();
    }

    //通过这两个方法我们可以实现ballView的一个状态切换的时候的一个背景；
    //设置成功的时候的状态；
    public void setCheckedStatus(){

    }
    //设置一般的时候的状态；
    public void setNormalStatus(){

    }


    public boolean  hasAnimation(){
        return isHasAnimation;
    }

    public void setHasAnimation(boolean isHasAnimation){

        this.isHasAnimation=isHasAnimation;
    }

    public OnCheckedChangeListener mOnCheckedChangeListener;


    public interface OnCheckedChangeListener{
        public void onCheckedChange(BallView view,boolean isChecked);
    }

    public void setOnCheckedChangeListener(OnCheckedChangeListener onCheckedChangeListener) {
        mOnCheckedChangeListener = onCheckedChangeListener;
    }
}
